#include <bits/stdc++.h>
using namespace std;

const int N = 50005;
unordered_map<int, int> sum;
struct Node{
    int pos, id;
    bool operator<(const Node& node) const{
    	return pos<node.pos;
    }
};
Node node[N];
int n;
int main(){
    scanf("%d", &n);
    for (int i=0;i<n;i++){
        scanf("%d%d", &node[i].pos, &node[i].id);
        sum[node[i].id]++;
    }
    sort(node,node+n);
    //
//    printf("\n");
//    for(int i=0;i<n;i++){
//    	printf("%d %d\n",node[i].pos,node[i].id);
//	}
    auto mp = sum;
    int res1, res2;
    int l = 0, r = n - 1;
    while (l<r&&mp[node[l].id]>1){
    	mp[node[l].id]--;
        ++l;
    }
    while (l<r&&mp[node[r].id]>1){
    	mp[node[r].id]--;
        --r;
    }
    res1 = node[r].pos - node[l].pos;
    //printf("%d %d\n",l,r);
    l = 0;
    r = n - 1; 
    while (l < r && sum[node[r].id] > 1){
    	sum[node[r].id]--;
       --r;
    }
    while (l < r && sum[node[l].id] > 1){
    	sum[node[l].id]--;
        ++l;
    }
    res2 = node[r].pos - node[l].pos;
    
    printf("%d", min(res1,res2));
    return 0;
}
